from PIL import Image, ImageDraw, ImageFont
import textwrap

# 创建一个空白的证书图像
width, height = 800, 600
image = Image.new('RGB', (width, height), color='white')
draw = ImageDraw.Draw(image)

# 尝试加载中文字体，如果失败则使用默认字体
font_path = None
font_size_title = 36
font_size_text = 24
font_size_small = 20

try:
    # 尝试加载系统中文字体（适用于Windows系统）
    import os
    import glob
    
    # Windows系统中常见的中文字体路径
    font_dirs = [
        'C:/Windows/Fonts',
        os.path.expanduser('~\AppData\Local\Microsoft\Windows\Fonts')
    ]
    
    # 尝试找到中文字体
    for font_dir in font_dirs:
        if os.path.exists(font_dir):
            # 尝试不同的中文字体文件
            for font_pattern in ['simhei.ttf', 'simsun.ttc', 'msyh.ttf', 'msyhbd.ttf']:
                font_files = glob.glob(os.path.join(font_dir, font_pattern))
                if font_files:
                    font_path = font_files[0]
                    break
        if font_path:
            break
    
    # 如果找到了中文字体，使用它
    if font_path:
        title_font = ImageFont.truetype(font_path, font_size_title)
        text_font = ImageFont.truetype(font_path, font_size_text)
        small_font = ImageFont.truetype(font_path, font_size_small)
    else:
        # 如果没有找到中文字体，使用默认字体
        title_font = ImageFont.load_default()
        text_font = ImageFont.load_default()
        small_font = ImageFont.load_default()
        print("警告：未找到中文字体，可能无法正确显示中文")
except Exception as e:
    # 如果加载字体失败，使用默认字体
    title_font = ImageFont.load_default()
    text_font = ImageFont.load_default()
    small_font = ImageFont.load_default()
    print(f"加载字体时出错：{e}")

# 绘制证书边框
border_color = 'black'
border_width = 2
draw.rectangle([(border_width, border_width), (width-border_width-1, height-border_width-1)], outline=border_color, width=border_width)

# 绘制虚线
dash_length = 10
gap_length = 5

# 上边虚线
y_pos = 50
x = border_width
while x < width - border_width:
    draw.line([(x, y_pos), (x + dash_length, y_pos)], fill=border_color, width=1)
    x += dash_length + gap_length

# 下边虚线
y_pos = height - 50
x = border_width
while x < width - border_width:
    draw.line([(x, y_pos), (x + dash_length, y_pos)], fill=border_color, width=1)
    x += dash_length + gap_length

# 绘制标题
title = "植树证书"
# 使用textbbox替代textsize
bbox = draw.textbbox((0, 0), title, font=title_font)
title_width = bbox[2] - bbox[0]
title_height = bbox[3] - bbox[1]
draw.text(((width - title_width) // 2, 80), title, font=title_font, fill='black')

# 绘制正文内容
text_lines = [
    "小智 谢谢你：",
    "    你申请种植的 花棒 ，将由伊利",
    "公益基金会负责种下。查看种植进程>",
    "",
    "树苗编号：NO.HBI66308960305",
    "申请时间：2023年11月10日",
    "种植地点：鄂尔多斯"
]

# 计算文本起始位置
text_start_y = 150
for line in text_lines:
    # 计算文本宽度以居中显示
    if line.strip():
        # 如果是包含编号等信息的行，使用小一点的字体
        if any(keyword in line for keyword in ["树苗编号", "申请时间", "种植地点"]):
            current_font = small_font
        else:
            current_font = text_font
        
        # 使用textbbox替代textsize
        bbox = draw.textbbox((0, 0), line, font=current_font)
        line_width = bbox[2] - bbox[0]
        line_height = bbox[3] - bbox[1]
        
        # 确定x坐标以居中
        x_pos = (width - line_width) // 2
        # 对于缩进的行，进行特殊处理
        if line.startswith("    "):
            x_pos += 40
        
        draw.text((x_pos, text_start_y), line, font=current_font, fill='black')
    
    # 增加行高
    text_start_y += 35

# 保存图片
image.save('tree_certificate.png')
print("植树证书图片已生成：tree_certificate.png")

# 显示图片
image.show()